home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / wings / w2_src / font_sub.c < prev    next >
C/C++ Source or Header  |  1994-11-16  |  5KB  |  178 lines

  1. #include <egb.h>
  2. #include "module.h"
  3. #include "font_sub.h"
  4.  
  5. // 10進数表示関数
  6. void    font_10( char *strptn, int page, int position, int n, int r, int zero )
  7. {
  8.  
  9.     char    para[16];
  10.     int        i, range = 1;
  11.  
  12.     if( !r || r>=11 )
  13.         return;
  14.     if( r!=1 ){
  15.         for( i=1;i<=r-1;i++ )
  16.             range *= 10;
  17.     }
  18.     if( r==1 )
  19.         para[ 0 ] = n + 0x30;
  20.     else{
  21.         for( i=0;i<=r-2;i++ ){
  22.             para[ i ] = n / range + 0x30;
  23.             n %= range;
  24.             range /= 10;
  25.         }
  26.         para[ r-1 ] = n + 0x30;
  27.     }
  28.     if( zero ){
  29.         i = 0;
  30.         while( i!=r && para[ i ]==0x30 ){
  31.             para[ i ] = 0x20;
  32.             i++;
  33.         }
  34.         if( para[ r - 1 ]==0x20 )
  35.             para[ r - 1 ] = 0x30;
  36.     }
  37.     para[ r ] = '\0';
  38.     font_ank( strptn, page, position, para, 0 );
  39.  
  40. }
  41. // 16進数表示関数
  42. void    font_16( char *strptn, int page, int position, int n, int r, int zero )
  43. {
  44.  
  45.     char    para[16];
  46.     int        i, range = 1;
  47.  
  48.     if( !r || r>=9 )
  49.         return;
  50.     if( r!=1 ){
  51.         for( i=1;i<=r-1;i++ )
  52.             range *= 16;
  53.     }
  54.     if( r==1 )
  55.         para[ 0 ] = n + ( n<=9 ? 0x30 : 0x37 );
  56.     else{
  57.         for( i=0;i<=r-2;i++ ){
  58.             para[ i ] = n / range + ( (n/range)<=9 ? 0x30 : 0x37 );
  59.             n %= range;
  60.             range /= 16;
  61.         }
  62.         para[ r-1 ] = n + ( n<=9 ? 0x30 : 0x37 );
  63.     }
  64.     if( zero ){
  65.         i = 0;
  66.         while( i!=r && para[ i ]==0x30 ){
  67.             para[ i ] = 0x20;
  68.             i++;
  69.         }
  70.         if( para[ r - 1 ]==0x20 )
  71.             para[ r - 1 ] = 0x30;
  72.     }
  73.     para[ r ] = '\0';
  74.     font_ank( strptn, page, position, para, 0 );
  75.  
  76. }
  77. // ANK 2バイト文字混合表示関数
  78. void    font_mix( char *strptn, int page, int position, char *str, int len )
  79. {
  80.  
  81.     char    iskanji_1[ ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  82.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  83.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  84.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  85.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  86.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  87.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  88.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  89.                              0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  90.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  91.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  92.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  93.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  94.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  95.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  96.                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  97.     char    iskanji_2[ ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  98.                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  99.                               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  100.                               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  101.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  102.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  103.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  104.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
  105.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  106.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  107.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  108.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  109.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  110.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  111.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  112.                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 };
  113.     int        i = 0, j, jpn = 0, ank = 0, x;
  114.     
  115.     if( !len )
  116.         len = 32767;
  117.     x = position;
  118.     while( len && *( str + i ) ){
  119.         if( iskanji_1[ BYTE( str + i ) ] 
  120.                      && iskanji_2[ BYTE( str + i+1 ) ]
  121.                                  && *( str + i+1 ) ){
  122.             while( iskanji_1[ BYTE( str + i ) ] 
  123.                                 && iskanji_2[ BYTE( str + i+1 ) ]
  124.                                          && *( str + i+1 ) ){
  125.                 i += 2;
  126.                 jpn++;
  127.             }
  128.             if( len<jpn*2 ){
  129.                 jpn = len / 2;
  130.                 len = 0;
  131.             }
  132.             else
  133.                 len -= ( jpn * 2 );
  134.             font_kan( strptn, page, x, str, jpn );
  135.             x += ( jpn * 6 );
  136.             str += i;
  137.             i = jpn = 0;
  138.             if( iskanji_1[ BYTE( str + i ) ] 
  139.                          && !iskanji_2[ BYTE( str + i+1 ) ]
  140.                                      && *( str + i+1 ) ){
  141.                 if( len ){
  142.                     if( len==1 ){
  143.                         j = 1;
  144.                         len = 0;
  145.                     }
  146.                     else {
  147.                         j = 2;
  148.                         len -= 2;
  149.                     }
  150.                     font_ank( strptn, page, x, str, j );
  151.                 }
  152.                 x += 6;
  153.                 str += 2;
  154.                 ank = 0;
  155.             }
  156.         }
  157.         else{
  158.             while( !iskanji_1[ BYTE( str + i ) ] && *( str + i ) ){
  159.                 i++;
  160.                 ank++;
  161.             }
  162.             if( len ){
  163.                 if( len<ank ){
  164.                     ank = len;
  165.                     len = 0;
  166.                 }
  167.                 else
  168.                     len -= ank;
  169.             }
  170.             font_ank( strptn, page, x, str, ank );
  171.             x += ( ank * 3 );
  172.             str += i;
  173.             i = ank = 0;
  174.         }
  175.     }
  176.  
  177. }
  178.